{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "7b775e6a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "https://www.maigoo.com/goomai/226329.html\n",
      "http://www.maigoo.com/news/657216.html\n"
     ]
    }
   ],
   "source": [
    "#调取数据库#\n",
    "from bs4 import BeautifulSoup#解析HTML数据#\n",
    "import requests#用于发送HTTP请求，响应获取数据#\n",
    "import pandas as pd\n",
    "import openpyxl\n",
    "\n",
    "#获取文档数据#\n",
    "file = open (\"urls.txt\",\"r\",encoding = 'utf-8')\n",
    "content = file.read()\n",
    "print(content)\n",
    "file.close()\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "8e366fb6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[['https://www.maigoo.com/goomai/226329.html'], ['http://www.maigoo.com/news/657216.html']]\n"
     ]
    }
   ],
   "source": [
    "#读取文件创建列表#\n",
    "file = open (\"urls.txt\",\"r\",encoding = 'utf-8')\n",
    "lines = file.readlines()\n",
    "data = []\n",
    "for line in lines:\n",
    "    line = line.strip().split(',')\n",
    "    data.append(line)\n",
    "file.close()\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "54182304",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "http://www.maigoo.com/news/657216.html\n"
     ]
    }
   ],
   "source": [
    "#读取列表元素#\n",
    "print(','.join(data[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "f447b1d3",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "http://www.maigoo.com/news/657216.html\n",
      "https://www.maigoo.com/goomai/226329.html\n"
     ]
    }
   ],
   "source": [
    "url1=','.join(data[1])\n",
    "print(url1)\n",
    "url2=','.join(data[0])\n",
    "print(url2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "0686f59c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "排名: 城市 (省份/市) - GDP（亿元）\n",
      "1: 上海 (上海) - 44653\n",
      "2: 北京 (北京) - 41611\n",
      "3: 深圳 (广东) - 32388\n",
      "4: 重庆 (重庆) - 29129\n",
      "5: 广州 (广东) - 28839\n",
      "6: 苏州 (江苏) - 23958\n",
      "7: 成都 (四川) - 20818\n",
      "8: 武汉 (湖北) - 18866\n",
      "9: 杭州 (浙江) - 18753\n",
      "10: 南京 (江苏) - 16908\n",
      "11: 天津 (天津) - 16311\n",
      "12: 宁波 (浙江) - 15704\n",
      "13: 青岛 (山东) - 14921\n",
      "14: 无锡 (江苏) - 14851\n",
      "15: 长沙 (湖南) - 13969\n",
      "16: 郑州 (河南) - 12935\n",
      "17: 佛山 (广东) - 12698\n",
      "18: 福州 (福建) - 12308\n",
      "19: 泉州 (福建) - 12103\n",
      "20: 济南 (山东) - 12028\n",
      "21: 合肥 (安徽) - 12013\n",
      "22: 西安 (陕西) - 11487\n",
      "23: 南通 (江苏) - 11380\n",
      "24: 东莞 (广东) - 11200\n",
      "25: 常州 (江苏) - 9550\n",
      "26: 烟台 (山东) - 9516\n",
      "27: 唐山 (河北) - 8901\n",
      "28: 徐州 (江苏) - 8458\n",
      "29: 大连 (辽宁) - 8431\n",
      "30: 温州 (浙江) - 8030\n",
      "31: 厦门 (福建) - 7803\n",
      "32: 沈阳 (辽宁) - 7696\n",
      "33: 昆明 (云南) - 7541\n",
      "34: 绍兴 (浙江) - 7351\n",
      "35: 潍坊 (山东) - 7306\n",
      "36: 南昌 (江西) - 7204\n",
      "37: 扬州 (江苏) - 7105\n",
      "38: 石家庄 (河北) - 7101\n",
      "39: 盐城 (江苏) - 7080\n",
      "40: 长春 (吉林) - 6745\n",
      "41: 嘉兴 (浙江) - 6739\n",
      "42: 榆林 (陕西) - 6544\n",
      "43: 泰州 (江苏) - 6402\n",
      "44: 台州 (浙江) - 6041\n",
      "45: 襄阳 (湖北) - 5827\n",
      "46: 临沂 (山东) - 5779\n",
      "47: 漳州 (福建) - 5707\n",
      "48: 洛阳 (河南) - 5675\n",
      "49: 鄂尔多斯 (内蒙古) - 5613\n",
      "50: 太原 (山西) - 5571\n",
      "51: 金华 (浙江) - 5562\n",
      "52: 宜昌 (湖北) - 5503\n",
      "53: 哈尔滨 (黑龙江) - 5490\n",
      "54: 惠州 (广东) - 5401\n",
      "55: 济宁 (山东) - 5317\n",
      "56: 南宁 (广西) - 5218\n",
      "57: 镇江 (江苏) - 5017\n",
      "58: 贵阳 (贵州) - 4921\n",
      "59: 淮安 (江苏) - 4742\n",
      "60: 岳阳 (湖南) - 4711\n",
      "61: 南阳 (河南) - 4555\n",
      "62: 赣州 (江西) - 4524\n",
      "63: 芜湖 (安徽) - 4502\n",
      "64: 淄博 (山东) - 4403\n",
      "65: 遵义 (贵州) - 4401\n",
      "66: 沧州 (河北) - 4388\n",
      "67: 邯郸 (河北) - 4346\n",
      "68: 常德 (湖南) - 4275\n",
      "69: 菏泽 (山东) - 4205\n",
      "70: 宿迁 (江苏) - 4112\n",
      "71: 衡阳 (湖南) - 4090\n",
      "72: 珠海 (广东) - 4045\n",
      "73: 九江 (江西) - 4027\n",
      "74: 连云港 (江苏) - 4005\n",
      "75: 茂名 (广东) - 3905\n",
      "76: 乌鲁木齐 (新疆) - 3893\n",
      "77: 湖州 (浙江) - 3850\n",
      "78: 曲靖 (云南) - 3802\n",
      "79: 保定 (河北) - 3800\n",
      "80: 江门 (广东) - 3773\n",
      "81: 包头 (内蒙古) - 3750\n",
      "82: 许昌 (河南) - 3747\n",
      "83: 湛江 (广东) - 3713\n",
      "84: 绵阳 (四川) - 3637\n",
      "85: 德州 (山东) - 3633\n",
      "86: 中山 (广东) - 3631\n",
      "87: 东营 (山东) - 3621\n",
      "88: 周口 (河南) - 3617\n",
      "89: 株洲 (湖南) - 3616\n",
      "90: 滁州 (安徽) - 3610\n",
      "91: 廊坊 (河北) - 3565\n",
      "92: 宁德 (福建) - 3555\n",
      "93: 宜春 (江西) - 3473\n",
      "94: 新乡 (河南) - 3464\n",
      "95: 宜宾 (四川) - 3428\n",
      "96: 威海 (山东) - 3408\n",
      "97: 兰州 (甘肃) - 3344\n",
      "98: 呼和浩特 (内蒙古) - 3329\n",
      "99: 龙岩 (福建) - 3314\n",
      "100: 上饶 (江西) - 3310\n"
     ]
    }
   ],
   "source": [
    "#发送HTTP请求并响应#\n",
    "def get_rank_data():\n",
    "    headers = {'User-Agent': 'Mozilla//5.0(Windows NT 10.0; Win64; x64) AppleeWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}\n",
    "    response = requests.get(url1, headers=headers)   \n",
    "#解析HTML数据#\n",
    "    soup = BeautifulSoup(response.text, 'html.parser')\n",
    "    body = soup.find('body')#定位目标#\n",
    "    trs = body.find_all('tr') #提取目标#\n",
    "#提取城市排名#\n",
    "    rank_data = []\n",
    "    for tr in trs:\n",
    "        tds =tr.find_all('td')\n",
    "        if tds:\n",
    "            rank = tds[0].get_text()\n",
    "            name = tds[1].get_text()\n",
    "            location = tds[2].get_text()\n",
    "            GDP = tds[3].get_text()\n",
    "            rank_data.append({'rank': rank, 'name': name, 'location':location, 'GDP':GDP})\n",
    "    return rank_data\n",
    "if __name__=='__main__':\n",
    "    rank_data = get_rank_data()\n",
    "    for data in rank_data:\n",
    "        print(f'{data[\"rank\"]}: {data[\"name\"]} ({data[\"location\"]}) - {data[\"GDP\"]}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "13d95cd5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据已经保存到excel1表格中\n"
     ]
    }
   ],
   "source": [
    "df = pd.DataFrame(rank_data)\n",
    "excel_file = 'GDP.xlsx'\n",
    "sheet_name = 'Sheet1'\n",
    "df.to_excel(excel_file,sheet_name=sheet_name,index=False)\n",
    "print(\"数据已经保存到excel1表格中\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "1379c4cd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "地区: 2022年 (2021年) - 2020年\n",
      "上海: 44652.8 (43653.17) - 38963.3\n",
      "北京: 41610.95 (41045.63) - 35943.25\n",
      "深圳: 32387.68 (30664.85) - 27670\n",
      "重庆: 29129.03 (28077.28) - 25041.43\n",
      "广州: 28839 (28231.97) - 25019\n",
      "成都: 20817.5 (19916.98) - 17717\n",
      "武汉: 18866.43 (17716.76) - 15616\n",
      "杭州: 18753 (18109.42) - 16106\n",
      "南京: 16907.85 (16356) - 14818\n",
      "世界城市: 房价 (国内城市) - 住宅商品房平均销售价格(元/㎡)\n",
      "蒙特卡洛: 55207美元/m² (深圳) - 61601元/㎡\n",
      "伦敦: 29676美元/m² (北京) - 46941元/㎡\n",
      "纽约: 17191美元/m² (上海) - 40974元/㎡\n",
      "特拉维夫: 17149美元/m² (杭州) - 29781元/㎡\n",
      "东京: 16322美元/m² (广州) - 30580元/㎡\n",
      "巴黎: 15867美元/m² (南京) - 27938元/㎡\n",
      "莫斯科: 14714美元/m² (厦门) - 31425元/㎡\n",
      "维也纳: 14333美元/m² (宁波) - 21152元/㎡\n",
      "日内瓦: 14260美元/m² (天津) - 16370元/㎡\n",
      "新加坡: 13748美元/m² (海口) - 16400元/㎡\n",
      "面积最大: 面积 (面积最小) - 面积\n",
      "巴州: 47.15万km² (三沙) - 20km²\n",
      "那曲: 36.96万km² (澳门) - 32.8km²\n",
      "伊犁州: 35万km² (台北) - 271.8km²\n",
      "阿里地区: 33.71万km² (香港) - 1106.34km²\n",
      "海西: 30.07万km² (桃园) - 1220.95km²\n",
      "阿拉善盟: 27万km² (舟山) - 1440.2km²\n",
      "玉树: 26.7万km² (鄂州) - 1594km²\n",
      "呼伦贝尔: 25.27km² (厦门) - 1699.39km²\n",
      "和田地区: 24.78万km² (珠海) - 1711.24km²\n",
      "面积最大: 面积 (面积最小) - 面积\n",
      "伊尔库茨克: 76.79万km² (梵蒂冈城) - 0.44km²\n",
      "阿尔汉格尔斯克: 58.74万km² (马累) - 1.5km²\n",
      "巴音郭楞蒙古自治州: 47.15万km² (蒙特卡洛) - 1.98km²\n",
      "那曲地区: 36.96万km² (富纳富提) - 2.4km²\n",
      "乌兰乌德: 35.13万km² (罗索) - 5.4km²\n",
      "伊犁州: 35万km² (巴斯特尔) - 6.1km²\n",
      "阿里地区: 33.71万km² (直布罗陀) - 6.5km²\n",
      "海西: 30.07万km² (科罗尔) - 8km²\n",
      "阿拉善盟: 27万km² (布里奇顿) - 10km²\n",
      "玉树: 26.7万km² (普拉亚) - 10km²\n",
      "地区: 2022年(万人) (2021年(万人)) - 2020年(万人)\n",
      "重庆市: 3213.3 (3212.43) - 3205.42\n",
      "上海市: 2475.89 (2489.43) - 2487.09\n",
      "北京市: 2184.3 (2188.6) - 2189.3\n",
      "成都市: 2126.8 (2119.2) - 2093.78\n",
      "广州市: 1873.41 (1881.06) - 1867.66\n",
      "深圳市: 1766.18 (1768.16) - 1756\n",
      "武汉市: 1373.9 (1364.89) - 1232.65\n",
      "天津市: 1363 (1373) - 1386.6\n",
      "西安市: 1299.59 (1316.3) - 1295.29\n",
      "苏州市: 1291.1 (1284.78) - 1274.83\n",
      "排名: 国家 (人口数) - 排名\n",
      "1: 中国 (14.26亿人) - 6\n",
      "2: 印度 (14.17亿人) - 7\n",
      "3: 美国 (3.38亿人) - 8\n",
      "4: 印尼 (2.76亿人) - 9\n",
      "5: 巴基斯坦 (2.36亿人) - 10\n"
     ]
    }
   ],
   "source": [
    "#发送HTTP请求并响应#\n",
    "def get_city_data():\n",
    "    headers = {'User-Agent': 'Mozilla//5.0(Windows NT 10.0; Win64; x64) AppleeWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}\n",
    "    response = requests.get(url2, headers=headers)   \n",
    "#解析HTML数据#\n",
    "    soup = BeautifulSoup(response.text, 'html.parser')\n",
    "    body = soup.find('body')#定位目标#\n",
    "    trs = body.find_all('tr') #提取目标#\n",
    "#提取城市排名#\n",
    "    city_data = []\n",
    "    for tr in trs:\n",
    "        \n",
    "        tds = tr.find_all('td')\n",
    "    \n",
    "    # 检查列表长度是否符合预期\n",
    "        if len(tds) >= 4:\n",
    "            city = tds[0].get_text()\n",
    "            year1 = tds[1].get_text()\n",
    "            year2 = tds[2].get_text()\n",
    "            year3 = tds[3].get_text()\n",
    "            city_data.append({'city': city, 'year1': year1, 'year2': year2, 'year3': year3})\n",
    "    return city_data\n",
    "if __name__=='__main__':\n",
    "    city_data = get_city_data()\n",
    "    for data in city_data:\n",
    "        print(f'{data[\"city\"]}: {data[\"year1\"]} ({data[\"year2\"]}) - {data[\"year3\"]}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "7f5d21a5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据已经保存到excel2表格中\n"
     ]
    }
   ],
   "source": [
    "df = pd.DataFrame(city_data)\n",
    "excel_file = 'city.xlsx'\n",
    "sheet_name = 'Sheet2'\n",
    "df.to_excel(excel_file,sheet_name=sheet_name,index=False)\n",
    "print(\"数据已经保存到excel2表格中\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "85db4ab8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# 读取第一个 Excel 文件\n",
    "df1 = pd.read_excel('GDP.xlsx')\n",
    "\n",
    "# 读取第二个 Excel 文件\n",
    "df2 = pd.read_excel('city.xlsx')\n",
    "\n",
    "# 将两个 DataFrame 合并\n",
    "combined_df = pd.concat([df1, df2], ignore_index=True)\n",
    "\n",
    "# 将合并后的 DataFrame 保存到新的 Excel 文件中\n",
    "combined_df.to_excel('combined_file1.xlsx', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e47bbc36",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8402c91",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
